home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 351-375 / disk_352 / mg / src.lzh / h / line.h < prev    next >
C/C++ Source or Header  |  1990-05-23  |  2KB  |  54 lines

  1. #ifndef    LINE_H
  2. #define LINE_H
  3. /*
  4.  * All text is kept in circularly linked lists of "LINE" structures. These
  5.  * begin at the header line (which is the blank line beyond the end of the
  6.  * buffer). This line is pointed to by the "BUFFER". Each line contains a the
  7.  * number of bytes in the line (the "used" size), the size of the text array,
  8.  * and the text. The end of line is not stored as a byte; it's implied.
  9.  * Future additions will include update hints, and a list of marks into the
  10.  * line.
  11.  */
  12. struct line {
  13.     struct line    *l_fp;    /* Link to the next line     */
  14.     struct line    *l_bp;    /* Link to the previous line     */
  15.     short           l_size;    /* Allocated size         */
  16.     short           l_used;    /* Used size             */
  17. #ifndef ZEROARRAY
  18.     char            l_text[1];    /* A bunch of characters.     */
  19. #else
  20.     char            l_text[];    /* A bunch of characters.     */
  21. #endif
  22. };
  23.  
  24. /*
  25.  * The rationale behind these macros is that you could (with some editing,
  26.  * like changing the type of a line link from a "LINE *" to a "REFLINE", and
  27.  * fixing the commands like file reading that break the rules) change the
  28.  * actual storage representation of lines to use something fancy on machines
  29.  * with small address spaces.
  30.  */
  31. #define lforw(lp)    ((lp)->l_fp)
  32. #define lback(lp)    ((lp)->l_bp)
  33. #define lgetc(lp, n)    (CHARMASK((lp)->l_text[(n)]))
  34. #define lputc(lp, n, c) ((lp)->l_text[(n)]=(c))
  35. #define llength(lp)    ((lp)->l_used)
  36. #define ltext(lp)    ((lp)->l_text)
  37.  
  38. /*
  39.  * line externals.
  40.  */
  41. extern struct line *lalloc();
  42. extern struct line *lallocx();
  43.  
  44. #ifndef    NO_PROTO
  45. struct line    *lalloc(int used);
  46. struct line    *lallocx(int used);
  47. void            lfree(struct line * lp);
  48. int             getgoal(struct line * dlp);
  49.  
  50. /* Define things that need the line structure */
  51. int d_makename  PROTO((struct line *, char *));
  52. #endif
  53. #endif
  54.